#define _CRT_SECURE_NO_WARNINGS 1

#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
#include<unordered_map>

using namespace std;

//char g[2][4];
//unordered_map<string, int> dist;
//unordered_map<string, pair<char, string>> pre;
//queue<string> q;
//
//void set(string s)
//{
//    for (int i = 0; i < 4; i++)    g[0][i] = s[i];
//    for (int i = 7, j = 0; j < 4; i--, j++) g[1][j] = s[i];
//}
//
//string get()
//{
//    string res;
//    for (int i = 0; i < 4; i++)    res += g[0][i];
//    for (int i = 3; i >= 0; i--)    res += g[1][i];
//    return res;
//}
//
//string move0(string s)
//{
//    set(s);
//    for (int i = 0; i < 4; i++)    swap(g[0][i], g[1][i]);
//    return get();
//}
//
//string move1(string s)
//{
//    set(s);
//    int v0 = g[0][3], v1 = g[1][3];
//    for (int i = 3; i > 0; i--)
//    {
//        g[0][i] = g[0][i - 1];
//        g[1][i] = g[1][i - 1];
//    }
//    g[0][0] = v0, g[1][0] = v1;
//    return get();
//}
//
//string move2(string s)
//{
//    set(s);
//    int v = g[0][1];
//    g[0][1] = g[1][1];
//    g[1][1] = g[1][2];
//    g[1][2] = g[0][2];
//    g[0][2] = v;
//    return get();
//}
//
//void bfs(string start, string end)
//{
//    if (start == end)    return;
//    q.push(start);
//    dist[start] = 0;
//
//    while (!q.empty())
//    {
//        auto t = q.front();
//        q.pop();
//
//        string m[3];
//        m[0] = move0(t);
//        m[1] = move1(t);
//        m[2] = move2(t);
//
//        for (int i = 0; i < 3; i++)
//        {
//            string str = m[i];
//            if (dist.count(str) == 0)
//            {
//                dist[str] = dist[t] + 1;
//                pre[str] = { char(i + 'A'),t };
//                if (str == end)    break;
//                q.push(str);
//            }
//        }
//    }
//}
//
//int main()
//{
//    int x;
//    string start, end;
//    for (int i = 0; i < 8; i++)
//    {
//        cin >> x;
//        end += char(x + '0');
//    }
//
//    for (int i = 1; i <= 8; i++)    start += char(i + '0');
//
//    bfs(start, end);
//
//    cout << dist[end] << endl;
//
//    string res;
//    while (end != start)
//    {
//        res += pre[end].first;
//        end = pre[end].second;
//    }
//
//    reverse(res.begin(), res.end());
//    if (res.size())  cout << res << endl;
//    return 0;
//}
